package com.stars.module.role.service;

import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.stars.base.entity.CommonDTO;
import com.stars.base.entity.Result;
import com.stars.module.role.entity.StarRole;

/**
 * @author : Rocks
 * @version : 1.0
 * @date : 2022/11/25 15:28
 * @description : 角色服务接口
 */
public interface StarRoleService {

    /**
     * 加载角色树
     * @author : Rocks
     * @date :  2023/2/26 20:55
     * @return JSONArray ElementUI 要求的树架构
     */
    JSONArray loadTree();

    /**
     * 根据查询条件加载角色列表
     * @author : Rocks
     * @date :  2023/2/26 20:56
     * @param dto 查询条件
     * @return JSONObject list-数据列表 <br> total-数据总量
     */
    JSONObject loadRoleListByFid(CommonDTO dto);

    /**
     * 校验角色类型变更是否可行，
     * 如果是角色变更为文件夹，校验角色是否绑定权限和人员，如果有则不允许变更
     * 如果是由文件夹变更为角色，校验文件夹下是否有有效的角色，如果有则不允许变更
     * @author : Rocks
     * @date :  2023/6/30 17:31
     * @param roleId 角色id
     * @param type 变更类型 0 角色 1文件夹
     * @return Result
     */
    Result checkRoleTypeChange (String roleId,String type);

    /**
     * 保存或更新角色对象
     * @author : Rocks
     * @date :  2023/2/26 20:57
     * @param role 角色实体对象
     * @return boolean
     */
    boolean saveOrUpdateRole(StarRole role);

    /**
     * 删除角色对象
     * @author : Rocks
     * @date :  2023/2/26 20:57
     * @param roleId 要删除的角色ID
     * @return Result
     */
    Result removeRole(String roleId);

    /**
     * 查询指定父级下最大排序
     * @author : Rocks
     * @date :  2023/2/26 20:58
     * @param fid 指定父级ID
     * @return int 当前父级下最大排序，如果没有子元素则返回0
     */
    int getMaxIndex(String fid);

    /**
     * 根据角色ID获取角色对象
     * @author : Rocks
     * @date :  2023/2/26 20:59
     * @param id 要查询角色ID
     * @return StarRole
     */
    StarRole loadRoleById(String id);

    /**
     * 加载用户全部角色ID，多个角色用逗号分割
     * @author : Rocks
     * @date :  2023/7/7 18:11
     * @param userId 用户ID
     * @return String
     */
    String loadUserRoles (String userId);
}
